/**
* ...
* @author Ludo
* @version 0.1
*/

/*
import net.za.mediumrare.xmlPackage.XMLParser;
var myObject:XMLParser = new XMLParser ();
myObject.loadXML ("content.xml");
myObject.onXMLLoad = function () {
	listAll (myObject.data);
};


*/
// IMPORTED DEPENDENCIES
//
import mx.utils.Delegate;
import mx.events.EventDispatcher;
//
class clases.MadParser.XMLParser.XMLParser {
       //
       // PRIVATE PROPERTIES
       //
       private var xml:XML;
       public var data:Object;
       //
       //
       //
       public function get _xml():XML {
               return xml;
       }
       public function set _xml(x:XML) {
               xml = x;
       }
       public function get _data():Object {
               return data;
       }
       public function set _data(o:Object):Void {
               trace("ERROR - \"XMLParser\" _data property is read-only and connot be set.");
       }
       //
       // CONSTRUCTOR
       //
       public function XMLParser(s:String) {
               initXML(s);
               //data = new Object();
               EventDispatcher.initialize(this);
       }
       //
       // PRIVATE METHODS
       //
       public function buildObject (n){
	       	var o = new String (n.firstChild.nodeValue), s, i, t;
		for (s = (o == "null") ? n.firstChild : n.childNodes[1]; s != null; s = s.nextSibling) {
			t = s.childNodes.length > 0 ? arguments.callee (s) : new String (s.nodeValue);
			for (i in s.attributes) {
				t[i] = s.attributes[i];
			}
			if (o[s.nodeName] != undefined) {
				if (!(o[s.nodeName] instanceof Array)) {
					o[s.nodeName] = [o[s.nodeName]];
				}
				o[s.nodeName].push (t);
			}
			else {
				o[s.nodeName] = t;
			}
		}
		data=o;
		xml = new XML();
		return data;
	};
       private function initXML(s:String):Void {
               if (s == undefined) {
                       xml = new XML();
		       xml.ignoreWhite = true;
               } else {
                       xml = new XML(s);
		       xml.ignoreWhite = true;
               }
               xml.onLoad = Delegate.create(this, xmlOnLoad);
			   xmlOnLoad(true);
       }
       private function xmlOnLoad(success:Boolean):Void {
               if (success) {
                       trace("SUCCESS - xml loaded successfully.");
                       //xml.ignoreWhite = true;
                       this.dispatchEvent({type:"onXMLLoad", target:this});
					   //trace(xml);
						buildObject(xml);
                       this.onXMLLoad();
               } else {
                       trace("ERROR - xml could not load");
                       return;
               }
       }
       //
       // PUBLIC METHODS
       //
       public function loadXML(url:String):Void {
               xml.load(url);
       }
       public function getBytesTotal():Number {
               return xml.getBytesTotal();
       }
       public function getBytesLoaded():Number {
               return xml.getBytesLoaded();
       }
       public function getPercentLoaded():Number {
               return Math.floor((this.getBytesLoaded() / this.getBytesTotal()) * 100);
       }
       
       //
       // EVENTS
       //
       public function onXMLLoad():Void {
               // onLoad proxy for internal xml object
       }
       public function onXMLParse():Void {
               // called when xml is finished parsing
       }
       function addEventListener() {
               // Used by EventDispather mixin
       }
       function removeEventListener() {
               // Used by EventDispather mixin
       }
       function dispatchEvent() {
               // Used by EventDispather mixin
       }
       function dispatchQueue() {
               // Used by EventDispather mixin
       }
//
      
       

}

